package service

import (
	admin "admin_srv/basic/proto"
	"admin_srv/handler/dao"
	"context"
	"fmt"
	"time"
)

type Server struct {
	admin.UnimplementedAdminServer //管理员服务
}

// 创建会员套餐
func (s *Server) CreateVipPlan(_ context.Context, in *admin.CreateVipPlanReq) (*admin.CreateVipPlanResp, error) {
	plan, err := dao.CreateVipPlan(in)
	if err != nil {
		return nil, fmt.Errorf("创建会员套餐失败", err.Error())
	}
	return &admin.CreateVipPlanResp{
		Id:      int64(plan.Id),
		Message: "创建会员套餐成功",
	}, nil
}

// 获取会员列表
func (s *Server) GetVipPlanList(_ context.Context, in *admin.GetVipPlanListReq) (*admin.GetVipPlanListResp, error) {
	list, err := dao.GetVipPlanList(in)
	if err != nil {
		return nil, fmt.Errorf("获取会员套餐列表失败", err.Error())
	}
	return &admin.GetVipPlanListResp{
		List: list,
	}, nil
}

// 获取会员详情
func (s *Server) GetVipPlanDetail(_ context.Context, in *admin.GetVipPlanDetailReq) (*admin.GetVipPlanDetailResp, error) {
	detail, err := dao.GetVipPlanDetail(in)
	if err != nil {
		return nil, fmt.Errorf("获取会员套餐详情失败", err.Error())
	}
	return &admin.GetVipPlanDetailResp{
		Id:          int64(detail.Id),
		PlanName:    detail.PlanName,
		PlanDays:    int64(detail.PlanDays),
		Price:       detail.Price,
		Description: detail.Description,
		IsAvailable: int64(detail.IsAvailable),
		IsDeleted:   int64(detail.IsDeleted),
		CreateTime:  detail.CreateTime.Format(time.DateTime),
	}, nil
}

// 更新会员套餐
func (s *Server) UpdateVipPlan(_ context.Context, in *admin.UpdateVipPlanReq) (*admin.UpdateVipPlanResp, error) {
	_, err := dao.UpdateVipPlan(in)
	if err != nil {
		return nil, fmt.Errorf("更新会员套餐失败", err.Error())
	}
	return &admin.UpdateVipPlanResp{
		Success: true,
	}, nil
}

// 删除会员套餐
func (s *Server) DeleteVipPlan(_ context.Context, in *admin.DeleteVipPlanReq) (*admin.DeleteVipPlanResp, error) {
	_, err := dao.DeleteVipPlan(in)
	if err != nil {
		return nil, fmt.Errorf("删除会员套餐失败", err.Error())
	}

	return &admin.DeleteVipPlanResp{
		Success: true,
	}, nil
}

// 启用会员套餐
func (s *Server) EnaBleVipPlan(_ context.Context, in *admin.EnaBleVipPlanReq) (*admin.EnaBleVipPlanResp, error) {
	_, err := dao.EnableVipPlan(in)
	if err != nil {
		return nil, fmt.Errorf("启用会员套餐失败", err.Error())
	}
	return &admin.EnaBleVipPlanResp{
		Success: true,
	}, nil
}

// 禁用会员套餐
func (s *Server) DisableVipPlan(_ context.Context, in *admin.DisableVipPlanReq) (*admin.DisableVipPlanResp, error) {
	_, err := dao.DisableVipPlan(in)
	if err != nil {
		return nil, fmt.Errorf("禁用会员套餐失败", err.Error())
	}
	return &admin.DisableVipPlanResp{
		Success: true,
	}, nil
}

//虚拟商品模块！！！！！！

// 创建虚拟商品
func (s *Server) CreateVirtualGoods(_ context.Context, in *admin.CreateVirtualGoodsReq) (*admin.CreateVirtualGoodsResp, error) {
	goods, err := dao.CreateVirtualGoods(in)
	if err != nil {
		return nil, fmt.Errorf("创建虚拟商品失败", err.Error())
	}
	return &admin.CreateVirtualGoodsResp{
		GoodsId:   int64(goods.Id),
		GoodsName: goods.Name,
	}, nil
}

// 更新虚拟商品
func (s *Server) UpdateVirtualGoods(_ context.Context, in *admin.UpdateVirtualGoodsReq) (*admin.UpdateVirtualGoodsResp, error) {
	_, err := dao.UpdateVirtualGoods(in)
	if err != nil {
		return nil, fmt.Errorf("更新虚拟商品失败", err.Error())

	}
	return &admin.UpdateVirtualGoodsResp{
		Success: true,
	}, nil
}

// 删除虚拟商品
func (s *Server) DeleteVirtualGoods(_ context.Context, in *admin.DeleteVirtualGoodsReq) (*admin.DeleteVirtualGoodsResp, error) {
	_, err := dao.DeleteVirtualGoods(in)
	if err != nil {
		return nil, fmt.Errorf("删除虚拟商品失败", err.Error())
	}
	return &admin.DeleteVirtualGoodsResp{
		Success: true,
	}, nil
}

// 虚拟商品列表
func (s *Server) GetVirtualGoodsList(_ context.Context, in *admin.GetVirtualGoodsListReq) (*admin.GetVirtualGoodsListResp, error) {
	list, err := dao.GetVirtualGoodsList(in)
	if err != nil {
		return nil, fmt.Errorf("获取虚拟商品列表失败", err.Error())
	}
	return &admin.GetVirtualGoodsListResp{
		List: list,
	}, nil
}

// 虚拟商品详情
func (s *Server) GetVirtualGoodsDetail(_ context.Context, in *admin.GetVirtualGoodsDetailReq) (*admin.GetVirtualGoodsDetailResp, error) {
	detail, err := dao.GetVirtualGoodsDetail(in)
	if err != nil {
		return nil, fmt.Errorf("获取虚拟商品详情失败", err.Error())
	}
	return &admin.GetVirtualGoodsDetailResp{
		Name:          detail.Name,
		Type:          int64(detail.Type),
		ImageUrl:      detail.ImageUrl,
		Price:         detail.Price,
		CurrentType:   int64(detail.CurrencyType),
		Description:   detail.Description,
		DurationDays:  int64(detail.DurationDays),
		StockQuantity: int64(detail.StockQuantity),
		SortOrder:     int64(detail.SortOrder),
		EffectConfig:  detail.EffectConfig,
	}, nil
}

// 启用虚拟商品
func (s *Server) EnableVirtualGoods(_ context.Context, in *admin.EnableVirtualGoodsReq) (*admin.EnableVirtualGoodsResp, error) {
	_, err := dao.EnableVirtualGoods(in)
	if err != nil {
		return nil, fmt.Errorf("启用虚拟商品失败", err.Error())
	}
	return &admin.EnableVirtualGoodsResp{
		Success: true,
	}, nil
}

// 禁用虚拟商品
func (s *Server) DisableVirtualGoods(_ context.Context, in *admin.DisableVirtualGoodsReq) (*admin.DisableVirtualGoodsResp, error) {
	_, err := dao.DisableVirtualGoods(in)
	if err != nil {
		return nil, fmt.Errorf("禁用虚拟商品失败", err.Error())
	}
	return &admin.DisableVirtualGoodsResp{
		Success: true,
	}, nil
}

// 获取即将到期会员列表
func (s *Server) GetExpiringVips(_ context.Context, in *admin.GetExpiringVipsReq) (*admin.GetExpiringVipsResp, error) {
	vips, message, err := dao.GetExpiringVips(in)
	if err != nil {
		return nil, fmt.Errorf("获取到期会员列表失败", err.Error())
	}
	return &admin.GetExpiringVipsResp{
		List:    vips,
		Total:   int64(len(vips)),
		Message: message,
		Success: true,
	}, nil
}

// 发送会员到期提醒
func (s *Server) SendVipExpireReminders(_ context.Context, in *admin.SendVipExpireRemindersReq) (*admin.SendVipExpireRemindersResp, error) {
	reminders, err := dao.SendVipExpireReminders(in)
	if err != nil {
		return nil, fmt.Errorf("发送会员到期提醒失败", err.Error())
	}
	return &admin.SendVipExpireRemindersResp{
		Success:      true,
		Message:      reminders.Message,
		TotalCount:   reminders.TotalCount,
		SuccessCount: reminders.SuccessCount,
		FailCount:    reminders.FailCount,
	}, nil
}
